package com.biblioteca.servicio;

import com.biblioteca.persistencia.Comentario;
import org.springframework.stereotype.Service;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import com.biblioteca.dao.LibroDao;
import com.biblioteca.persistencia.Libro;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;



@Service
public class LibroServicioImpl implements LibroServicio {
    
    
    private LibroDao libroDao;
    
    
    @Autowired
    @Required
    public void setLibroDao(final LibroDao libroDao){
        this.libroDao=libroDao;        
    }

    @Override
    public void create(Libro libro) {
        libroDao.insert(libro);
    }

    @Override
    public void borrar(String id) {
        Libro aborrar = libroDao.find(Libro.class, id);
        libroDao.remove(aborrar);
    }

    @Override
    public List<Libro> getALLLibros() {
        return libroDao.getAll(Libro.class);
    }

    @Override
    public int countAllLibros() {
        return libroDao.countAll(Libro.class);
    }

    @Override
    public void create1(Libro libro) {
        if(libro.getIsbn()==null){
            libroDao.insert(libro);
        }
        else{
            libroDao.update(libro);
        }
    }

    @Override
    public Libro nuevo() {
        Libro libro = new Libro();      
        return libro;
    }

       
       @Override
       public List<Libro> buscar(int criterio, String palabra) {
        List<Libro> resultados = new ArrayList();
        switch (criterio) {
         
            case 1: {
                Libro libro = libroDao.finByIsbn(Libro.class, palabra);
                if(libro != null){
                    resultados.add(libro);
                }
                break;
            }
        }
        return resultados;
    }

    @Override
    public List<Libro> buscarLibro(String criterio, String txt) {
               List<Libro > lista = new ArrayList<Libro>();
               Libro l = libroDao.finByIsbn(Libro.class, criterio);
               lista.add(l);
            return lista;
    }

    @Override
    public void update(Libro libro) {
        libroDao.update(libro);
    }

    @Override
    public void addComm(Libro lib, String cadComentada, String usuario) {
        int num;
        num = lib.getNumComentarios();
        Comentario comm = new Comentario();
        comm.setComentador(usuario);
        comm.setContenido(cadComentada);
        lib.getComentarios().add(comm);
        lib.setNumComentarios(num + 1);
    }
    
    public void borraComentarios(){
        
    }

    //@PostConstruct
    @Override
    public void preload_libros() {
        libroDao.removeAll(Libro.class);
        Date fecha = new Date();
        Libro l1 = new Libro("1255455785","Las cosas de la vida","Anonimo","Anaya","NO","Novela","mirar en el reverso",fecha);
        Libro l2 = new Libro("1786464664","El despertar","Anonimo","Anaya","NO","Novela","mirar en el reverso",fecha);
        Libro l3 = new Libro("4656655645","Algo pasa en las  Vegas","Anonimo","Castillo de papel","NO","Novela","mirar en el reverso",fecha);
        Libro l4 = new Libro("5988555566","Cosas de la vida","Anonimo","Anaya","NO","Novela","mirar en el reverso",fecha);
        Libro l5 = new Libro("4788885656","El extraño caso de Benjamin Button","Anonimo","Anaya","NO","Novela","mirar en el reverso",fecha);
        Libro l6 = new Libro("4758586556","La rueca","Anonimo","Cervantes","SI","Cientifico","mirar en el reverso",fecha);
        
        libroDao.insert(l1);
        libroDao.insert(l2);
        libroDao.insert(l3);
        libroDao.insert(l4);
        libroDao.insert(l5);
        libroDao.insert(l6);
    }

    @Override
    public Libro buscarIsbn(String isbn) {
        return  libroDao.findByPK(Libro.class, isbn);
    }
    
    @Override
    public void restarLibro(String isbn){
        Libro l = libroDao.finByIsbn2(Libro.class, isbn);
        l.setCantidad(l.getCantidad() - 1);
        libroDao.update(l);
    }
    
    
    
}
